✅空リンクも取得出来るようにする | external-completion
実装
非同期処理
各projectの取得はawaitで同期処理にする
各projectのfetchを並列に走らせて、それらのPromiseをPromise.allでまとめる
/icons/done.icon2020-09-03 08:16:19 意外と簡単にできた
2020-09-05 22:01:27 どこからもリンクされていないページのタイトルが補完候補に挙がってこないことに気づいた
linksだけでなく、titleもリストに加えるように修正する
code:script.js
async _importLinks() {
return this.projects.map(project =>
this._fetchAllLinks(project)
.then(links => {
links.forEach(link => this.links.push(/${project}/${link}));
return links.length;
})
.then(length => console.log(Loaded ${length} links from /${project}))
);
}
async _fetchAllLinks(projectName) {
let followingId = null;
let result =[];
console.log(Start loading links from ${projectName}...);
while (true) {
await (!followingId ?
fetch(/api/pages/${projectName}/search/titles) :
fetch(/api/pages/${projectName}/search/titles?followingId=${followingId}))
.then(res => {
followingId = res.headers.get('X-Following-Id');
return res.json();
})
if(!followingId) break;
console.log(Loading links from ${projectName}: followingId = ${followingId});
}
console.log(Finish loading links from ${projectName}.);
//重複を取り除く
}